# *-*- coding:utf-8 -*-
# @Author  : Eliza
# @Time    : 2021/08/22 23:37
# @Software : RubyMine

puts "正则表达式"
=begin
正则表达式(regular expression)描述了一种字符串匹配的模式，可以用来检查一个串是否含有某种子串、
将匹配的子串做替换或者从帮个串中取出符合某个条件的子串等。
作用：
  数据隐藏(188****3456);
  数据采集;
  数据过滤(**)
  数据验证
正则表达式从字面上看是一种介于斜杠之间或介于跟在 %r 后的任意分隔符之间的模式

=end
str = "abcDe fbc123g hi jk456"
# 定义正则

integer = (str =~ /bc/) #查找 str 中是否存在 3 ，并返回首次匹配的位置
if integer != nil
  puts integer, str[integer] #b
else
  puts "not exit"
end
puts "--------结果一样----------"

puts /bc/ =~ str
puts str =~ /bc/
puts "-------- ^ ----------"
# 从字符串头开始匹配
puts str =~ /^ab/
puts str =~ /^abc/
puts str =~ /^bc/ #nil
puts str =~ /^sdfs/ #nil
puts "--------附加规则----------"
=begin
  i	当匹配文本时忽略大小写。
  o	只执行一次 #{} 插值，正则表达式在第一次时就进行判断。
  x	忽略空格，允许在整个表达式中放入空白符和注释。
  m	匹配多行，把换行字符识别为正常字符。
  u,e,s,n	把正则表达式解释为 Unicode（UTF-8）、EUC、SJIS 或 ASCII。如果没有指定修饰符，则认为正则表达式使用的是源编码。
=end
#str = "abcDe fbc123g hi jk456"
puts "---- /i 忽略大小写  --"
puts str =~ /cd/i #2
puts str =~ /CD/i #2
puts "---- /x 忽略空格  --"
puts str =~ /e f/ #4
puts str =~ /ef/x #2

#str = "abcDefbc23ghijk456"
puts "---- /i 忽略大小写  --"
puts str =~ /c+d/i #2
puts "---匹配范围 【】 ----"

puts str =~ /[cd]/#2
puts str =~ /[^cd]/#除了cd 之外，开头为 0 :ab
puts str =~ /[^ab]/#除了ab 之外,开头为：2 cD
puts str=~/[a-z]/ #从a -z A-Z
puts str=~/./ #除去转义字符

